package com.senlingspace.payment.douyin.bean.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.senlingspace.payment.douyin.DouyinFunctionEnum;
import com.senlingspace.payment.douyin.bean.response.DouyinPreVerifyTicketResponse;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * 验券前置请求
 *
 * @author lebronjames
 * @date 2024/07/23
 */
@Data
public class DouyinPreVerifyTicketRequest implements DouyinRequest<DouyinPreVerifyTicketResponse> {

    /**
     * 从二维码解析出来的标识（传参前需要先进行 URL 编码）
     * <p>
     * 注意：
     * encrypted_data 和 code 必须二选一。
     * TODO：我们一律使用 code，不使用这种方式
     */
    @JsonProperty("encrypted_data")
    private String encryptedData;

    /**
     * 原始的抖音团购券码。
     * <p>
     * 注意：
     * encrypted_data 和 code 必须二选一。
     */
    @JsonProperty("code")
    private String code;

    /**
     * 核销的抖音门店id
     * 如何获得抖音门店id，可以参考门店关联及匹配能力 <a href="https://developer.open-douyin.com/docs/resource/zh-CN/local-life/capability/basic/shopquery-introduce"/>
     */
    @JsonProperty("poi_id")
    private String poiId;

    @Override
    public DouyinFunctionEnum getFunction() {
        return DouyinFunctionEnum.pre_verify_ticket;
    }

    @Override
    public String getBody() {

        if (StringUtils.isNotBlank(encryptedData)) {
            return "encrypted_data=" + this.encryptedData + "&poi_id=" + (StringUtils.isBlank(this.poiId) ? "" : this.poiId);
        }else {
            return "code=" + this.code + "&poi_id=" + (StringUtils.isBlank(this.poiId) ? "" : this.poiId);
        }
    }

    @Override
    public Class<DouyinPreVerifyTicketResponse> getResponseType() {
        return DouyinPreVerifyTicketResponse.class;
    }

}
